#include <REGX52.H>
#include "Delay.h"

sbit RCK = P3^5;//对P35重新命名,对应原理图RCLK
sbit SCK = P3^6;//对P36重命名重新命名,对应原理图SRCLK
sbit SER = P3^4;//对P34重新命名，对应原理图SER

#define MATRIX_LED_PORT		P0
/**
   *@brief	74HC595写入一个字节
   *@param	Byte 要写入的字节
   *@retval	无
   */
void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SER = Byte&(0x80>>i);
		SCK = 1;
		SCK = 0;
	}
	RCK = 1;
	RCK = 0;
//	SER = Byte&0x80;//最高位为1&0x80=0x80；最高位为0&0x80=0
//	SCK = 1;
//	SCK = 0;//以上移动第一位
//	SER = Byte&0x40;//最高位为1&0x40=0x40；最高位为0&0x40=0
//	SCK = 1;
//	SCK = 0;//以上移动第二位
//	SER = Byte&0x20;//最高位为1&0x20=0x20；最高位为0&0x20=0
//	SCK = 1;
//	SCK = 0;//以上移动第三位
//	...如此循环八次
	
}
/**
	 *@brief	LED点阵屏显示一列数据
   *@param	Column 要选择的列，范围：0~7，0在最左边
	 *@param	Data 选择显示的数据，高位在上，1为亮，0为灭
   *@retval 无
   */
void MatrixLED_showColumn(unsigned char Column,Data)
{
	_74HC595_WriteByte(Data);
	MATRIX_LED_PORT = ~(0x80>>Column);
	Delay(1);
	MATRIX_LED_PORT = 0xFF;
}

void main()
{
	SCK = 0;
	RCK = 0;
	while(1)
	{
		//使用逐列扫描
		MatrixLED_showColumn(0,0x3C);
		MatrixLED_showColumn(1,0x42);
		MatrixLED_showColumn(2,0xA9);
		MatrixLED_showColumn(3,0x85);
		MatrixLED_showColumn(4,0x85);
		MatrixLED_showColumn(5,0xA9);
		MatrixLED_showColumn(6,0x42);
		MatrixLED_showColumn(7,0x3C);
	}
}
